home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / COMP / TEST / MM2BENCH.M < prev    next >
Encoding:
Text File  |  1994-02-08  |  12.2 KB  |  3 lines

  1. ⓪ ⓪ (* Benchmark AG Version 1.2  vom  06.09.88⓪#⓪#Vorschlag von Arnd Beißner⓪#⓪#Version für MM2⓪#⓪#ACHTUNG: Stacksize auf mind. 32 KB einstellen!⓪,Und Ctrl-C in Shell abschalten⓪ *)⓪ ⓪ MODULE MM2Bench;⓪ ⓪ (*$S-,R-*)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS, ADR;⓪ ⓪ IMPORT GEMDOSIO; (*$E MOS *)⓪ IMPORT InOut;⓪ ⓪ FROM SysUtil1 IMPORT SuperPeek;⓪ ⓪ IMPORT Convert, StrConv;⓪ ⓪ FROM FastStrings IMPORT Append, Concat, Length, Assign, Compare;⓪ ⓪ IMPORT MathLib0;⓪ ⓪ IMPORT Text, NumberIO, Files;⓪ ⓪ ⓪ VAR⓪"StartTime : LONGCARD;⓪"Hz200 : LONGCARD;⓪"dummy: CARDINAL;⓪"dummyL: LONGCARD;⓪ ⓪ ⓪"PROCEDURE Start;⓪"BEGIN⓪$SuperPeek (1210L, StartTime);⓪"END Start;⓪ ⓪"PROCEDURE Stop() : LONGCARD;⓪"BEGIN⓪$SuperPeek (1210L, Hz200);⓪$RETURN (Hz200-StartTime) DIV 2;⓪"END Stop;⓪ ⓪ ⓪"PROCEDURE Test(Theme : ARRAY OF CHAR; Bench : PROC);⓪"VAR t: LONGCARD;⓪"BEGIN⓪$InOut.WriteString(Theme);⓪$Start;⓪$Bench;⓪$t:= Stop();⓪$InOut.WriteCard(t DIV 100,8);⓪$InOut.Write ('.');⓪$InOut.WriteLNum (t MOD 100,10,2,'0');⓪$InOut.WriteLn;⓪"END Test;⓪ ⓪"PROCEDURE IntMathShort;⓪"VAR⓪$x,y,i : CARDINAL;⓪ ⓪"BEGIN⓪$x := 0;⓪$FOR i:=0 TO 20000 DO⓪&y := 3;⓪&x := x + (y*y-y) DIV y;⓪&INC(y);⓪$END;⓪$dummy := x+y;⓪"END IntMathShort;⓪ ⓪ ⓪"PROCEDURE IntMathLong;⓪"VAR⓪$x,y : LONGCARD;⓪$i : CARDINAL;⓪$⓪"BEGIN⓪$x := 0;⓪$FOR i:=0 TO 20000 DO⓪&y := 3;⓪&x := x + (y*y-y) DIV y;⓪&INC(y);⓪$END;⓪$dummyL:= x+y;⓪"END IntMathLong;⓪ ⓪"PROCEDURE RealMathShort;⓪"VAR⓪$x : REAL;⓪$y : REAL;⓪$i : CARDINAL;⓪ ⓪"BEGIN⓪$x := 0.0;⓪$FOR i:=0 TO 15000 DO⓪&y := 3.0;⓪&x := x + (y*y-y) / y;⓪&y := y+SHORT (1.0);⓪$END;⓪"END RealMathShort;⓪ ⓪"PROCEDURE RealMathLong;⓪"VAR⓪$x : LONGREAL;⓪$y : LONGREAL;⓪$i : CARDINAL;⓪ ⓪"BEGIN⓪$x := 0.0;⓪$FOR i:=0 TO 15000 DO⓪&y := 3.0;⓪&x := x + (y*y-y) / y;⓪&y := y+1.0;⓪$END;⓪"END RealMathLong;⓪"⓪"PROCEDURE TriglogShort;⓪"VAR⓪$i : INTEGER;⓪$x,y : REAL;⓪$⓪"BEGIN⓪$x := 0.0;⓪$FOR i:=1 TO 1000 DO⓪&y := 9.9;⓪&x := x+SHORT(MathLib0.sin(MathLib0.arctan(MathLib0.cos(MathLib0.ln(y)))));⓪&y := y+1.0;⓪$END;⓪"END TriglogShort;⓪"⓪"PROCEDURE TriglogLong;⓪"VAR⓪$i : INTEGER;⓪$x,y : LONGREAL;⓪$⓪"BEGIN⓪$x := 0.0;⓪$FOR i:=1 TO 1000 DO⓪&y := 9.9;⓪&x := x+MathLib0.sin(MathLib0.arctan(MathLib0.cos(MathLib0.ln(y))));⓪&y := y+1.0;⓪$END;⓪"END TriglogLong;⓪ ⓪ ⓪"PROCEDURE While;⓪"VAR⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&WHILE i<10000 DO⓪(INC(i);⓪&END;⓪$END;⓪"END While;⓪"⓪"PROCEDURE Repeat;⓪"VAR⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&REPEAT⓪(INC(i);⓪&UNTIL i=10000;⓪$END;⓪"END Repeat;⓪"⓪"PROCEDURE Loop;⓪"VAR⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&LOOP⓪(INC(i);⓪(IF i=10000 THEN EXIT; END;⓪&END;⓪$END;⓪"END Loop;⓪ ⓪"PROCEDURE For;⓪"VAR⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪&END;⓪$END;⓪"END For;⓪"⓪"⓪"PROCEDURE ArrayAccess;⓪"VAR⓪$a : ARRAY [1..10000] OF INTEGER;⓪$i,j : INTEGER;⓪ ⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪(a[i] := 0;⓪&END;⓪$END;⓪$dummy := a[7];⓪"END ArrayAccess;⓪"⓪"⓪"PROCEDURE RecordAccess;⓪"VAR⓪$r : RECORD⓪*a : INTEGER;⓪*b : INTEGER;⓪(END;⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪(r.a := 1;⓪(r.b := 1;⓪&END;⓪$END;⓪$dummy := r.a;⓪"END RecordAccess;⓪"⓪"⓪"PROCEDURE RecordArray;⓪"VAR⓪$a : ARRAY [0..2000] OF RECORD⓪>u : INTEGER;⓪>v : CHAR;⓪>w : LONGINT;⓪<END;⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=0 TO 2000 DO⓪(a[i].u := 10;⓪(a[i].v := "a";⓪(a[i].w := 10;⓪&END;⓪$END;⓪$dummy := a[7].u;⓪"END RecordArray;⓪"⓪"⓪"PROCEDURE RecordArrayWith;⓪"VAR⓪$a : ARRAY [0..2000] OF RECORD⓪>u : INTEGER;⓪>v : CHAR;⓪>w : LONGINT;⓪<END;⓪$i,j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=0 TO 2000 DO⓪(WITH a[i] DO⓪*u := 10;⓪*v := "a";⓪*w := 10;⓪(END;⓪&END;⓪$END;⓪$dummy := a[7].u;⓪"END RecordArrayWith;⓪"⓪"PROCEDURE WriteToFile;⓪"VAR⓪$str : Files.File;⓪$i : INTEGER;⓪$⓪"BEGIN⓪$Files.Create(str,"F:\TESTFILE.TXT",Files.writeSeqTxt,Files.replaceOld);⓪$FOR i:=1 TO 1000 DO⓪&Text.Write(str,"a");⓪&Text.WriteString(str,"Test");⓪&Text.WriteLn (str);⓪&NumberIO.WriteInt(str,10,3);⓪&Text.WriteLn (str);⓪&NumberIO.WriteReal(str,1.0,5,2);⓪&Text.WriteLn (str);⓪$END;⓪$Files.Close(str);⓪"END WriteToFile;⓪ ⓪ ⓪"PROCEDURE ReadFromFile;⓪"VAR⓪$str : Files.File;⓪$i : INTEGER;⓪$ch : CHAR;⓪$s : ARRAY [0..80] OF CHAR;⓪$int : INTEGER;⓪$r : LONGREAL;⓪$ok: BOOLEAN;⓪"BEGIN⓪$Files.Open(str,"F:\TESTFILE.TXT",Files.readSeqTxt);⓪$FOR i:=1 TO 1000 DO⓪&Text.Read(str,ch);⓪&Text.ReadString(str,s);⓪&Text.ReadLn (str);⓪&NumberIO.ReadInt(str,int,ok);⓪&Text.ReadLn (str);⓪&NumberIO.ReadLReal(str,r,ok);⓪&Text.ReadLn (str);⓪$END;⓪$Files.Close(str);⓪"END ReadFromFile;⓪ ⓪"PROCEDURE ParameterPassing;⓪"VAR⓪$x : INTEGER;⓪$a,b,c : INTEGER;⓪$d,e : LONGINT;⓪$f,g : CHAR;⓪$h,i : LONGREAL;⓪$⓪$⓪$PROCEDURE fewval(a,b : INTEGER);⓪$BEGIN⓪$END fewval;⓪$⓪$⓪$PROCEDURE fewvar(VAR a,b : INTEGER);⓪$BEGIN⓪$END fewvar;⓪$⓪$⓪$PROCEDURE manyval(a,b,c : INTEGER; d,e : LONGINT;⓪6f,g : CHAR; h,i : LONGREAL);⓪$BEGIN⓪$END manyval;⓪$⓪$⓪$PROCEDURE manyvar(VAR a,b,c : INTEGER; VAR d,e : LONGINT;⓪6VAR f,g : CHAR; VAR h,i : LONGREAL);⓪$BEGIN⓪$END manyvar;⓪$⓪*⓪"BEGIN⓪$a := 1;⓪$b := 1;⓪$c := 1;⓪$d := 1;⓪$e := 1;⓪$f := "a";⓪$g := "b";⓪$h := 1.1;⓪$i := 1.1;⓪$FOR x:=0 TO 25000 DO⓪&fewval(1,1);    (* constant values *)⓪&fewval(a,b);⓪&manyval(1,1,1,1,1,"a","a",1.1,1.1);       (* constant values *)⓪&manyval(a,b,c,d,e,f,g,h,i);⓪&fewvar(a,b);⓪&manyvar(a,b,c,d,e,f,g,h,i);⓪$END;⓪"END ParameterPassing;⓪ ⓪"⓪"PROCEDURE StructurePassing;⓪"TYPE⓪$rec = RECORD⓪,a : INTEGER;⓪,b : CHAR;⓪,c : LONGINT;⓪,d : REAL;⓪*END;⓪$⓪%shortarray = ARRAY [0..7] OF CHAR;⓪%longarray = ARRAY [0..19] OF CHAR;⓪$⓪"VAR⓪$r : rec;⓪$s : shortarray;⓪$l : longarray;⓪$i : INTEGER;⓪$⓪$PROCEDURE P(r1,r2,r3 : rec; s1,s2 : shortarray; l1 : longarray);⓪$BEGIN⓪$END P;⓪%⓪"BEGIN⓪$FOR i:=1 TO 25000 DO⓪&P(r,r,r,s,s,l);⓪$END;⓪"END StructurePassing;⓪ ⓪"PROCEDURE ConversionCheck;⓪"VAR⓪$i : CARDINAL;⓪$c,pos : CARDINAL;⓪$lc : LONGCARD;⓪$r : REAL;⓪$str : ARRAY [0..80] OF CHAR;⓪$Ok : BOOLEAN;⓪ ⓪"BEGIN⓪$c := 1;⓪$lc := 1D;⓪$r := 1.1;⓪$FOR i:=1 TO 2000 DO⓪&Convert.ConvCard(c,2,str);⓪&pos:= 0;⓪&c:= StrConv.StrToCard(str,pos,Ok);⓪&Convert.ConvCard(lc,2,str);⓪&pos:= 0;⓪&lc:= StrConv.StrToLCard(str,pos,Ok);⓪&Convert.ConvReal(r,4,2,str);⓪&pos:= 0;⓪&r:= StrConv.StrToReal(str,pos,Ok);⓪$END;⓪"END ConversionCheck;⓪ ⓪ ⓪"PROCEDURE StringCheck;⓪"VAR⓪$i,x : CARDINAL;⓪$s1,s2,s3 : ARRAY [0..80] OF CHAR;⓪$⓪"BEGIN⓪$s1 := "Benchmarks don't lie,";⓪$s2 := "But Liars do benchmarking.";⓪$FOR i:=1 TO 2000 DO⓪&Assign(s1,s3);⓪&Append(s2,s3);⓪&x := Length(s3);⓪&x := INTEGER(Compare(s1,s2));⓪$END;⓪"END StringCheck;⓪ ⓪ ⓪ (* nun mit Reg-Vars *)⓪ ⓪"PROCEDURE rIntMathShort;⓪"VAR⓪$(*$Reg*)x,(*$Reg*)y,(*$Reg*)i : CARDINAL;⓪ ⓪"BEGIN⓪$x := 0;⓪$FOR i:=0 TO 20000 DO⓪&y := 3;⓪&x := x + (y*y-y) DIV y;⓪&INC(y);⓪$END;⓪$dummy := x+y;⓪"END rIntMathShort;⓪ ⓪ ⓪"PROCEDURE rIntMathLong;⓪"VAR⓪$(*$Reg*)x,(*$Reg*)y : LONGCARD;⓪$(*$Reg*)i : CARDINAL;⓪$⓪"BEGIN⓪$x := 0;⓪$FOR i:=0 TO 20000 DO⓪&y := 3;⓪&x := x + (y*y-y) DIV y;⓪&INC(y);⓪$END;⓪$dummyL:= x+y;⓪"END rIntMathLong;⓪ ⓪ ⓪"PROCEDURE rWhile;⓪"VAR⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&WHILE i<10000 DO⓪(INC(i);⓪&END;⓪$END;⓪"END rWhile;⓪"⓪"PROCEDURE rRepeat;⓪"VAR⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&REPEAT⓪(INC(i);⓪&UNTIL i=10000;⓪$END;⓪"END rRepeat;⓪"⓪"PROCEDURE rLoop;⓪"VAR⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&i := 0;⓪&LOOP⓪(INC(i);⓪(IF i=10000 THEN EXIT; END;⓪&END;⓪$END;⓪"END rLoop;⓪ ⓪"PROCEDURE rFor;⓪"VAR⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪&END;⓪$END;⓪"END rFor;⓪"⓪"⓪"PROCEDURE rArrayAccess;⓪"VAR⓪$a : ARRAY [1..10000] OF INTEGER;⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪(a[i] := 0;⓪&END;⓪$END;⓪$dummy := a[7];⓪"END rArrayAccess;⓪"⓪"⓪"PROCEDURE rRecordAccess;⓪"VAR⓪$r : RECORD⓪*a : INTEGER;⓪*b : INTEGER;⓪(END;⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=1 TO 10000 DO⓪(r.a := 1;⓪(r.b := 1;⓪&END;⓪$END;⓪$dummy := r.a;⓪"END rRecordAccess;⓪"⓪"⓪"PROCEDURE rRecordArray;⓪"VAR⓪$a : ARRAY [0..2000] OF RECORD⓪>u : INTEGER;⓪>v : CHAR;⓪>w : LONGINT;⓪<END;⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=0 TO 2000 DO⓪(a[i].u := 10;⓪(a[i].v := "a";⓪(a[i].w := 10;⓪&END;⓪$END;⓪$dummy := a[7].u;⓪"END rRecordArray;⓪"⓪"⓪"PROCEDURE rRecordArrayWith;⓪"VAR⓪$a : ARRAY [0..2000] OF RECORD⓪>u : INTEGER;⓪>v : CHAR;⓪>w : LONGINT;⓪<END;⓪$(*$Reg*)i,(*$Reg*)j : INTEGER;⓪$⓪"BEGIN⓪$FOR j:=1 TO 10 DO⓪&FOR i:=0 TO 2000 DO⓪(WITH a[i] DO⓪*u := 10;⓪*v := "a";⓪*w := 10;⓪(END;⓪&END;⓪$END;⓪$dummy := a[7].u;⓪"END rRecordArrayWith;⓪ ⓪"PROCEDURE rParameterPassing;⓪"VAR⓪$(*$Reg*)x : INTEGER;⓪$(*$Reg*)d,(*$Reg*)e : LONGINT;⓪$a,b,(*$Reg*)c : INTEGER;⓪$(*$Reg*)f,(*$Reg*)g : CHAR;⓪$h,i : LONGREAL;⓪$⓪$⓪$PROCEDURE fewval(a,b : INTEGER);⓪$BEGIN⓪$END fewval;⓪$⓪$⓪$PROCEDURE fewvar(VAR a,b : INTEGER);⓪$BEGIN⓪$END fewvar;⓪$⓪$⓪$PROCEDURE manyval(a,b,c : INTEGER; d,e : LONGINT;⓪6f,g : CHAR; h,i : LONGREAL );⓪$BEGIN⓪$END manyval;⓪$⓪$⓪$PROCEDURE manyvar(VAR a,b,c : INTEGER; VAR d,e : LONGINT;⓪6VAR f,g : CHAR; VAR h,i : LONGREAL);⓪$BEGIN⓪$END manyvar;⓪$⓪*⓪"BEGIN⓪$a := 1;⓪$b := 1;⓪$c := 1;⓪$d := 1;⓪$e := 1;⓪$f := "a";⓪$g := "b";⓪$h := 1.1;⓪$i := 1.1;⓪$FOR x:=0 TO 25000 DO⓪&fewval(1,1);    (* constant values *)⓪&fewval(a,b);⓪&manyval(1,1,1,1,1,"a","a",1.1,1.1);       (* constant values *)⓪&manyval(a,b,c,d,e,f,g,h,i);⓪&fewvar(a,b);⓪$END;⓪"END rParameterPassing;⓪ ⓪ ⓪ VAR ch: CHAR;⓪ ⓪ BEGIN⓪"InOut.WriteString ('Output file? ');⓪"InOut.OpenOutput ('TXT');⓪"InOut.WriteLn;⓪"InOut.WriteString("Benchmark AG Version 1.2 for Megamax Modula-2 V4.0");⓪"InOut.WriteLn;⓪"⓪"InOut.WriteString("--------------------------------------------------");⓪"InOut.WriteLn;⓪"(*⓪"Test("Intmath short   :",IntMathShort);⓪"Test("Intmath long    :",IntMathLong);⓪"*)⓪"Test("Realmath short  :",RealMathShort);⓪"Test("Realmath long   :",RealMathLong);⓪"Test("Triglog short   :",TriglogShort);⓪"Test("Triglog long    :",TriglogLong);⓪"(*⓪"Test("FOR             :",For);⓪"Test("LOOP            :",Loop);⓪"Test("REPEAT          :",Repeat);⓪"Test("WHILE           :",While);⓪"Test("ArrayAccess     :",ArrayAccess);⓪"Test("RecordAccess    :",RecordAccess);⓪"Test("RecordArray     :",RecordArray);⓪"Test("RecordArrayWith :",RecordArrayWith);⓪"Test("WriteToFile     :",WriteToFile);⓪"Test("ReadFromFile    :",ReadFromFile);⓪"Test("Pass Parameters :",ParameterPassing);⓪"Test("Pass Structures :",StructurePassing);⓪"Test("Conversions     :",ConversionCheck);⓪"Test("Strings         :",StringCheck);⓪"*)⓪"⓪"(*⓪"InOut.WriteString("-- mit Register - Optimierung --------------------");⓪"InOut.WriteLn;⓪"⓪"Test("Intmath short   :",rIntMathShort);⓪"Test("Intmath long    :",rIntMathLong);⓪"Test("FOR             :",rFor);⓪"Test("LOOP            :",rLoop);⓪"Test("REPEAT          :",rRepeat);⓪"Test("WHILE           :",rWhile);⓪"Test("ArrayAccess     :",rArrayAccess);⓪"Test("RecordAccess    :",rRecordAccess);⓪"Test("RecordArray     :",rRecordArray);⓪"Test("RecordArrayWith :",rRecordArrayWith);⓪"Test("Pass Parameters :",rParameterPassing);⓪"*)⓪"⓪"InOut.WriteString("--------------------------------------------------");⓪"InOut.WriteLn;⓪"InOut.CloseOutput⓪ END MM2Bench.⓪ ə
  2. (* $FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$000010B9$FFE77EA6$00002E41$FFE77EA6$000010B4$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6$FFE77EA6Ç$000010B9T.......T.......T..T....T.......T.......T.......T.......T.......T.......T.......$000018C0$0000284F$000028A7$00002954$00002B91$00002BF8$00002C4D$00002BF8$00002B99$00002DBF$00001290$000010B9$00001A8D$000018C0$00002762$00001A8DãÇé*)
  3.